import type { STORAGE_MODES } from '@/enum/modules/indicator'
import type { CONTAIN_SUB } from '@/enum/modules/public'
import type {
  IndicatorInfo,
  SaveOrUpdateIndicatorParams,
} from '@/types'

const controller = getAjaxBaseUrl('/indicator', '/energy')

// 指标管理
/** 查询指标列表 */
export function loadPointList(pointId: number, isVirtually?: 0 | 1) {
  return get<IndicatorInfo[]>(`${controller}/loadPointList`, {
    pointId,
    isVirtually,
  })
}

/** 根据ID查询指标信息 */
export function loadIndicator(id: number) {
  return get<IndicatorInfo[] | null>(
    `${controller}/loadIndicator?id=${id}`,
  )
}

/** 根据ID删除指标信息 */
export function deleteIndicator(id: number) {
  return get(`${controller}/deleteIndicator?id=${id}`)
}

/** 新增或修改指标信息 */
export function saveOrUpdateIndicator(params: SaveOrUpdateIndicatorParams) {
  return post<IndicatorInfo>(
    `${controller}/saveOrUpdateIndicator`,
    params,
  )
}

/** 根据点位ID查询指标递归树 */
export function loadTreeIndicator(pointId: number) {
  return get(`${controller}/loadTreeIndicator?pointId=${pointId}`)
}

/** 根据计量器具id查询绑定的指标 */
export function selectIndicatorByToolsId(toolsId: number) {
  return get(`${controller}/selectIndicatorByToolsId`, {
    toolsId,
  })
}

/** 分页查询统计指标 */
export function queryIndicatorsByPage(params: {
  pageNumber: number
  pageSize: number
  containSub?: CONTAIN_SUB
  pointId?: number
  keyword?: string
  source?: any
}) {
  return post(`${controller}/page`, params)
}

/** 删除统计指标 */
export function deleteIndicatorById(id: number) {
  return get(`${controller}/delete/${id}`)
}

/** 保存或更新统计指标基本信息 */
export function saveOrUpdateOneStep(data: {
  id?: number
  indicatorName: string
  indicatorNumber: string
  unitId: number
  unit: string
  pointId: number
  pointCode: string
  indicatorCode?: string
  source: number
}) {
  return post(`${controller}/saveOrUpdateOneStep`, data)
}

/** 保存或更新统计指标公式 */
export function saveOrUpdateTwoStep(data: {
  indicatorId: number
  indicatorNumber: string
  calculationFormulaContent?: string
  statisticsFormulaContent?: string
}) {
  return post(`${controller}/saveOrUpdateTwoStep`, data)
}

/** 保存或更新统计指标数据存储 */
export function saveOrUpdateThreeStep(data: {
  indicatorId: number
  indicatorDataStoreCoreList: {
    indicatorNumber: string
    /** 时间类型(1y-1年,1M-1月,1d-一天,1H-1小时,0m-实时) */
    timeType: string
    /** 存储类型(0-无，1-采集，2-录入，3-计算公式，4-统计公式 */
    type: number
  }[]
}) {
  return post(`${controller}/saveOrUpdateThreeStep`, data)
}

/** 获取指标详情 */
export function getIndicatorDetailsById(id: number) {
  return get(`${controller}/detail/${id}`)
}

/** 根据统计指标公式推导其中所使用的指标 */
export function resolveIndicatorsByExpression(expression: string) {
  return post(`${controller}/indicatorList`, { expression })
}

/** 根据计量器具的能源品种获取模板数据列 */
export function queryTpls(energyCode: string) {
  return get(`${controller}/template/energyType/${energyCode}`)
}
/** 批量保存计量器具关联指标 */
export function saveOrUpdateIndicatorWithTools(toolsId: number, data: any) {
  return post(`${controller}/measuringTool/saveOrUpdate/${toolsId}`, data)
}

/** 指标数据趋势折线图 */
export function queryIndicatorDataByTimeType(params: {
  indicatorNumber: string
  timeType: STORAGE_MODES
  startTime: string
  endTime: string
}) {
  return get(`${controller}/trend`, params)
}

/** 修改实时数据 */
export function updateRealTimeData(params: {
  indicatorCode: string
  value: number
  time: string
}) {
  return post(`${controller}/trend/update`, params)
}

// --------------------- 测点模板 ----------------------
export function saveOrUpdateMeasurePointTemplate(energyCode: string, data: any) {
  return post(`${controller}/template/energyType/${energyCode}`, data)
}
